from django.shortcuts import render
from django.views import View
from django.http import JsonResponse,HttpResponse
from django.core.cache import cache
from .models import Area

# Create your views here.
"""
需求：获取省份信息
前端：当页面加载时，会发送ajax请求,来获取省份信息

后端：接收请求，查询省份信息，返回省份信息

"""
class AreaView(View):
    def get(self,request:HttpResponse):
        """
        需求：获取省份信息
        前端：当页面加载时，会发送ajax请求,来获取省份信息
        后端：接收请求，S查询省份信息，返回省份信息
        """
        # 从缓存中获取省份数据
        province_list = cache.get('province_list')
        # 如果缓存中没有省份数据
        if province_list is None:
            # 查询省份数据
            provinces = Area.objects.filter(parent=None)
            # 序列化省份数据
            province_list = [
                {
                    'id':province.id,
                    'name':province.name
                }
                for province in provinces
            ]
            # 缓存省份数据
            cache.set('province_list', province_list, 3600)
        # 返回省份数据
        return JsonResponse({
            'code':0,
            'msg':'ok',
            'province_list':province_list
        })
class SubAreasView(View):
    """省市区数据"""

    def get(self, request,id):
        """提供省市区数据"""

        # 提供市或区数据
        sub_key = 'sub_area_%s'%id
        sub_data = cache.get(sub_key)
        if sub_data is None:
            # 查询市或区数据
            parent_model = Area.objects.get(id=id)  # 查询市或区的父级
            sub_model_list = parent_model.subs.all()

            # 序列化市或区数据
            sub_list = []
            for sub_model in sub_model_list:
                sub_list.append({'id': sub_model.id, 'name': sub_model.name})

            sub_data = {
                'id': parent_model.id,  # 父级id            
                'name': parent_model.name,  # 父级name
                'subs': sub_list  # 父级的子集
            }
            # 缓存市或区数据
            cache.set(sub_key, sub_data, 3600*24)               
        # 响应市或区数据
        return JsonResponse({'code': 0, 'errmsg': 'OK', 'sub_data': sub_data})
    
"""
不经常变化的数据，最好缓存到redis（内存）中，减少数据库的查询

"""